home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xml4j.jar / com / ibm / xml / framework / XMLParser.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  8.4 KB  |  404 lines

  1. package com.ibm.xml.framework;
  2.  
  3. import com.ibm.xml.internal.DefaultEntityHandler;
  4. import com.ibm.xml.internal.DefaultScanner;
  5. import com.ibm.xml.internal.DefaultValidationHandler;
  6. import com.ibm.xml.internal.ErrorCode;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.Reader;
  10. import java.text.MessageFormat;
  11. import java.util.Locale;
  12. import java.util.ResourceBundle;
  13. import org.xml.sax.DTDHandler;
  14. import org.xml.sax.DocumentHandler;
  15. import org.xml.sax.EntityResolver;
  16. import org.xml.sax.ErrorHandler;
  17. import org.xml.sax.InputSource;
  18. import org.xml.sax.Locator;
  19. import org.xml.sax.Parser;
  20. import org.xml.sax.SAXException;
  21. import org.xml.sax.SAXParseException;
  22.  
  23. public abstract class XMLParser implements Parser, XMLDocumentTypeHandler, XMLDocumentHandler, XMLErrorHandler {
  24.    private ParserState fParserState = new ParserState(this);
  25.    protected XMLScanner fScanner;
  26.    private XMLEntityHandler fEntityHandler;
  27.    private ErrorHandler fSAXErrorHandler;
  28.    protected Locale fLocale;
  29.    protected ResourceBundle fResourceBundle;
  30.    private boolean fAllowJavaEncodingName = false;
  31.    private boolean fWarningOnDuplicateAttDef = false;
  32.    private boolean fCheckNamespace = false;
  33.    private boolean fContinueAfterFatalError = false;
  34.    protected boolean fParseInProgress = false;
  35.    protected boolean fNeedReset = false;
  36.    private XMLDocumentHandler fDocHandler;
  37.    private XMLDocumentTypeHandler fDocTypeHandler;
  38.    private XMLValidationHandler fValidationHandler;
  39.  
  40.    protected XMLParser() {
  41.       this.fScanner = new DefaultScanner(this.fParserState);
  42.       this.fEntityHandler = new DefaultEntityHandler(this.fParserState);
  43.    }
  44.  
  45.    public void reset() {
  46.       this.fParserState.reset();
  47.       this.fScanner.reset(this.fParserState);
  48.       this.fEntityHandler.reset(this.fParserState);
  49.       this.fNeedReset = false;
  50.    }
  51.  
  52.    protected void resetOrCopy() {
  53.       ParserState var1 = this.fParserState;
  54.       this.fParserState = new ParserState(var1);
  55.       this.fScanner.reset(this.fParserState);
  56.       this.fEntityHandler.reset(this.fParserState);
  57.       this.fNeedReset = false;
  58.    }
  59.  
  60.    protected void checkHandlers() throws Exception {
  61.    }
  62.  
  63.    public ParserState getParserState() {
  64.       return this.fParserState;
  65.    }
  66.  
  67.    public XMLScanner getScanner() {
  68.       return this.fScanner;
  69.    }
  70.  
  71.    protected Locator getLocator() {
  72.       return this.fScanner.getLocator();
  73.    }
  74.  
  75.    public void setAllowJavaEncodingName(boolean var1) {
  76.       this.fAllowJavaEncodingName = var1;
  77.    }
  78.  
  79.    public boolean getAllowJavaEncodingName() {
  80.       return this.fAllowJavaEncodingName;
  81.    }
  82.  
  83.    public void setWarningOnDuplicateAttDef(boolean var1) {
  84.       this.fWarningOnDuplicateAttDef = var1;
  85.    }
  86.  
  87.    public boolean getWarningOnDuplicateAttDef() {
  88.       return this.fWarningOnDuplicateAttDef;
  89.    }
  90.  
  91.    public void setCheckNamespace(boolean var1) {
  92.       this.fCheckNamespace = var1;
  93.    }
  94.  
  95.    public boolean getCheckNamespace() {
  96.       return this.fCheckNamespace;
  97.    }
  98.  
  99.    public void setContinueAfterFatalError(boolean var1) {
  100.       this.fContinueAfterFatalError = var1;
  101.    }
  102.  
  103.    public boolean getContinueAfterFatalError() {
  104.       return this.fContinueAfterFatalError;
  105.    }
  106.  
  107.    protected void setDocumentHandler(XMLDocumentHandler var1) {
  108.       this.fDocHandler = var1;
  109.    }
  110.  
  111.    public XMLDocumentHandler getDocumentHandler() {
  112.       return this.fDocHandler;
  113.    }
  114.  
  115.    protected void setDocumentTypeHandler(XMLDocumentTypeHandler var1) {
  116.       this.fDocTypeHandler = var1;
  117.    }
  118.  
  119.    public XMLDocumentTypeHandler getDocumentTypeHandler() {
  120.       return this.fDocTypeHandler;
  121.    }
  122.  
  123.    protected void setEntityHandler(XMLEntityHandler var1) {
  124.       this.fEntityHandler = var1;
  125.    }
  126.  
  127.    public XMLEntityHandler getEntityHandler() {
  128.       return this.fEntityHandler;
  129.    }
  130.  
  131.    public XMLErrorHandler getErrorHandler() {
  132.       return this;
  133.    }
  134.  
  135.    protected void setValidationHandler(XMLValidationHandler var1) {
  136.       this.fValidationHandler = var1;
  137.    }
  138.  
  139.    public XMLValidationHandler getValidationHandler() {
  140.       return this.fValidationHandler;
  141.    }
  142.  
  143.    protected void useDefaultValidationHandler() {
  144.       this.fValidationHandler = new DefaultValidationHandler(this.fParserState);
  145.    }
  146.  
  147.    public void loadCatalog(InputSource var1) throws Exception {
  148.       XMLEntityHandler var2 = this.getEntityHandler();
  149.       if (var2 != null) {
  150.          EntityResolver var3 = var2.getEntityResolver();
  151.          if (var3 != null) {
  152.             if (var3 instanceof Catalog) {
  153.                ((Catalog)var3).loadCatalog(var1);
  154.             } else {
  155.                throw new Exception("EntityResolver is not a Catalog");
  156.             }
  157.          } else {
  158.             throw new Exception("Catalog not installed");
  159.          }
  160.       } else {
  161.          throw new Exception("XMLEntityHandler not installed");
  162.       }
  163.    }
  164.  
  165.    public final void setLocale(Locale var1) throws SAXException {
  166.       if (this.fParseInProgress) {
  167.          throw new SAXException("setLocale may not be called while parsing");
  168.       } else {
  169.          if (this.fLocale != var1) {
  170.             this.fLocale = var1;
  171.             this.fResourceBundle = null;
  172.          }
  173.  
  174.       }
  175.    }
  176.  
  177.    public void setEntityResolver(EntityResolver var1) {
  178.       if (this.fEntityHandler != null) {
  179.          this.fEntityHandler.setEntityResolver(var1);
  180.       }
  181.  
  182.    }
  183.  
  184.    public void setDTDHandler(DTDHandler var1) {
  185.    }
  186.  
  187.    public void setDocumentHandler(DocumentHandler var1) {
  188.    }
  189.  
  190.    public void setErrorHandler(ErrorHandler var1) {
  191.       this.fSAXErrorHandler = var1;
  192.    }
  193.  
  194.    public void parse(InputSource var1) throws SAXException, IOException {
  195.       if (this.fParseInProgress) {
  196.          throw new SAXException("parse may not be called while parsing");
  197.       } else {
  198.          if (this.fNeedReset) {
  199.             this.resetOrCopy();
  200.          }
  201.  
  202.          try {
  203.             this.checkHandlers();
  204.             this.fParseInProgress = true;
  205.             this.fNeedReset = true;
  206.             this.fScanner.scanDocument(var1);
  207.             this.fParseInProgress = false;
  208.          } catch (SAXException var3) {
  209.             this.fParseInProgress = false;
  210.             throw var3;
  211.          } catch (IOException var4) {
  212.             this.fParseInProgress = false;
  213.             throw var4;
  214.          } catch (Exception var5) {
  215.             this.fParseInProgress = false;
  216.             throw new SAXException(var5);
  217.          }
  218.       }
  219.    }
  220.  
  221.    public void parse(String var1) throws SAXException, IOException {
  222.       InputSource var2 = new InputSource(var1);
  223.       this.parse(var2);
  224.  
  225.       try {
  226.          Reader var3 = var2.getCharacterStream();
  227.          if (var3 != null) {
  228.             var3.close();
  229.             return;
  230.          }
  231.  
  232.          InputStream var4 = var2.getByteStream();
  233.          if (var4 != null) {
  234.             var4.close();
  235.             return;
  236.          }
  237.       } catch (IOException var5) {
  238.       }
  239.  
  240.    }
  241.  
  242.    public boolean sendCharDataAsCharArray() {
  243.       return false;
  244.    }
  245.  
  246.    protected boolean errorHandlingEnabled() {
  247.       return this.fSAXErrorHandler != null;
  248.    }
  249.  
  250.    protected void handleError(String var1, String var2) throws Exception {
  251.       SAXParseException var3 = new SAXParseException(var2, this.getLocator());
  252.       if (this.fSAXErrorHandler == null) {
  253.          if (this.isFatal(var1)) {
  254.             throw var3;
  255.          }
  256.       } else if (this.isWarning(var1)) {
  257.          this.fSAXErrorHandler.warning(var3);
  258.       } else if (this.isFatal(var1)) {
  259.          this.fSAXErrorHandler.fatalError(var3);
  260.       } else {
  261.          this.fSAXErrorHandler.error(var3);
  262.       }
  263.    }
  264.  
  265.    protected final String getErrorMsgString(String var1, Object[] var2) {
  266.       if (this.fResourceBundle == null) {
  267.          if (this.fLocale == null) {
  268.             this.fResourceBundle = ResourceBundle.getBundle("com.ibm.xml.internal.msg.Message");
  269.          } else {
  270.             this.fResourceBundle = ResourceBundle.getBundle("com.ibm.xml.internal.msg.Message", this.fLocale);
  271.          }
  272.       }
  273.  
  274.       String var3 = this.fResourceBundle.getString(var1);
  275.       if (var2 != null) {
  276.          try {
  277.             var3 = MessageFormat.format(var3, var2);
  278.          } catch (Exception var5) {
  279.             var3 = this.fResourceBundle.getString(var1);
  280.             String var4 = ErrorCode.getErrorKey(172);
  281.             var3 = var3 + this.fResourceBundle.getString(var4);
  282.          }
  283.       }
  284.  
  285.       return var3;
  286.    }
  287.  
  288.    protected final boolean isWarning(String var1) {
  289.       boolean var2 = var1.startsWith("W_");
  290.       return var2;
  291.    }
  292.  
  293.    protected final boolean isFatal(String var1) {
  294.       boolean var2 = var1.startsWith("E_");
  295.       return var2;
  296.    }
  297.  
  298.    public final void error(int var1) throws Exception {
  299.       if (this.errorHandlingEnabled()) {
  300.          String var2 = ErrorCode.getErrorKey(var1);
  301.          String var3 = this.getErrorMsgString(var2, (Object[])null);
  302.          this.handleError(var2, var3);
  303.       }
  304.    }
  305.  
  306.    public final void error1(int var1, int var2) throws Exception {
  307.       String var3 = ErrorCode.getErrorKey(var1);
  308.       if (!this.errorHandlingEnabled() && !this.isFatal(var3)) {
  309.          this.fParserState.getStringPool().releaseString(var2);
  310.       } else {
  311.          String[] var4 = new String[]{this.fParserState.getStringPool().orphanString(var2)};
  312.          String var5 = this.getErrorMsgString(var3, var4);
  313.          this.handleError(var3, var5);
  314.       }
  315.    }
  316.  
  317.    public final void error2(int var1, int var2, int var3) throws Exception {
  318.       String var4 = ErrorCode.getErrorKey(var1);
  319.       if (!this.errorHandlingEnabled() && !this.isFatal(var4)) {
  320.          this.fParserState.getStringPool().releaseString(var2);
  321.          this.fParserState.getStringPool().releaseString(var3);
  322.       } else {
  323.          String[] var5 = new String[]{this.fParserState.getStringPool().orphanString(var2), this.fParserState.getStringPool().orphanString(var3)};
  324.          String var6 = this.getErrorMsgString(var4, var5);
  325.          this.handleError(var4, var6);
  326.       }
  327.    }
  328.  
  329.    public final void error3(int var1, int var2, int var3, int var4) throws Exception {
  330.       String var5 = ErrorCode.getErrorKey(var1);
  331.       if (!this.errorHandlingEnabled() && !this.isFatal(var5)) {
  332.          this.fParserState.getStringPool().releaseString(var2);
  333.          this.fParserState.getStringPool().releaseString(var3);
  334.          this.fParserState.getStringPool().releaseString(var4);
  335.       } else {
  336.          String[] var6 = new String[]{this.fParserState.getStringPool().orphanString(var2), this.fParserState.getStringPool().orphanString(var3), this.fParserState.getStringPool().orphanString(var4)};
  337.          String var7 = this.getErrorMsgString(var5, var6);
  338.          this.handleError(var5, var7);
  339.       }
  340.    }
  341.  
  342.    public final void error4(int var1, int var2, int var3, int var4, int var5) throws Exception {
  343.       String var6 = ErrorCode.getErrorKey(var1);
  344.       if (this.errorHandlingEnabled() || !this.getContinueAfterFatalError() && this.isFatal(var6)) {
  345.          String[] var7 = new String[]{this.fParserState.getStringPool().orphanString(var2), this.fParserState.getStringPool().orphanString(var3), this.fParserState.getStringPool().orphanString(var4), this.fParserState.getStringPool().orphanString(var5)};
  346.          String var8 = this.getErrorMsgString(var6, var7);
  347.          this.handleError(var6, var8);
  348.       } else {
  349.          this.fParserState.getStringPool().releaseString(var2);
  350.          this.fParserState.getStringPool().releaseString(var3);
  351.          this.fParserState.getStringPool().releaseString(var4);
  352.          this.fParserState.getStringPool().releaseString(var5);
  353.       }
  354.    }
  355.  
  356.    public abstract void doctypeDecl(int var1) throws Exception;
  357.  
  358.    public abstract void startInternalSubset() throws Exception;
  359.  
  360.    public abstract void endInternalSubset() throws Exception;
  361.  
  362.    public abstract void startExternalSubset(int var1, int var2) throws Exception;
  363.  
  364.    public abstract void endExternalSubset() throws Exception;
  365.  
  366.    public abstract void elementDecl(int var1) throws Exception;
  367.  
  368.    public abstract void attlistDecl(int var1, int var2) throws Exception;
  369.  
  370.    public abstract void internalEntityDecl(int var1) throws Exception;
  371.  
  372.    public abstract void externalEntityDecl(int var1) throws Exception;
  373.  
  374.    public abstract void unparsedEntityDecl(int var1) throws Exception;
  375.  
  376.    public abstract void parameterEntityDecl(int var1) throws Exception;
  377.  
  378.    public abstract void notationDecl(int var1) throws Exception;
  379.  
  380.    public abstract void startDocument(int var1, int var2, int var3) throws Exception;
  381.  
  382.    public abstract void endDocument() throws Exception;
  383.  
  384.    public abstract void startElement(int var1, int var2) throws Exception;
  385.  
  386.    public abstract void endElement(int var1) throws Exception;
  387.  
  388.    public abstract void startEntityReference(int var1) throws Exception;
  389.  
  390.    public abstract void endEntityReference(int var1) throws Exception;
  391.  
  392.    public abstract void characters(int var1, boolean var2) throws Exception;
  393.  
  394.    public abstract void ignorableWhitespace(int var1, boolean var2) throws Exception;
  395.  
  396.    public abstract void processingInstruction(int var1, int var2) throws Exception;
  397.  
  398.    public abstract void comment(int var1) throws Exception;
  399.  
  400.    public abstract void characters(char[] var1, int var2, int var3, boolean var4) throws Exception;
  401.  
  402.    public abstract void ignorableWhitespace(char[] var1, int var2, int var3, boolean var4) throws Exception;
  403. }
  404.